Fix java tree..(part 2)
[f432xdd.git] / java / Graph Editor / src / models / GraphModel.java
blob4aec25f2821223b9c52ba4c9853c49fb651d935e
1 package models;
3 import java.io.*;
4 import java.util.List;
5 import java.util.ArrayList;
6 import java.util.Observable;
7 import java.util.Observer;
8 import java.util.Scanner;
11 public class GraphModel extends Observable implements Observer{
12 private List<GraphEdge> edges;
13 private List<GraphVertex> vertexes;
16 public GraphVertex[] getVertexes(){
17 GraphVertex[] a = new GraphVertex[vertexes.size()];
18 return vertexes.toArray(a);
20 public GraphEdge[] getEdges(){
21 GraphEdge[] a = new GraphEdge[edges.size()];
22 return edges.toArray(a);
25 public GraphModel(){
26 edges = new ArrayList<GraphEdge>();
27 vertexes = new ArrayList<GraphVertex>();
30 public synchronized void setChanged() {
31 super.setChanged();
32 notifyObservers();
35 public void addEdge(GraphEdge ... edge){
36 for(int i=0; i < edge.length; i++){
37 edges.add(edge[i]);
38 edge[i].addObserver(this);
40 setChanged();
43 public void addGraph(GraphVertex ... vertex){
44 for(int i=0; i < vertex.length; i++){
45 vertexes.add(vertex[i]);
46 vertex[i].addObserver(this);
48 setChanged();
51 public void removeEdge(GraphEdge ... edge){
52 for(int i=0; i < edge.length; i++){
53 edges.remove(edge[i]);
54 edge[i].deleteObserver(this);
56 setChanged();
58 public void removeGraph(GraphVertex ... vertex){
59 for(int i=0; i < vertex.length; i++){
60 vertexes.remove(vertex[i]);
61 vertex[i].deleteObserver(this);
63 setChanged();
66 public GraphVertex getGraphByCoordinate(int x, int y){
67 for(int i=0; i < vertexes.size(); i++){
68 if(vertexes.get(i).isAt(x, y))
69 return vertexes.get(i);
71 return null;
74 public void saveModel() throws IOException {
75 System.out.println("Saving model...");
76 PrintWriter pw = new PrintWriter(new FileWriter("file.graph"));
77 pw.println(vertexes.size() + "," + edges.size());
78 for(int i=0; i < vertexes.size(); i++) {
79 pw.println(vertexes.get(i).getX() +","+ vertexes.get(i).getY() +","+ vertexes.get(i).getHeight() +","+ vertexes.get(i).getWidth() +","+ vertexes.get(i).getName());
81 for(int i=0; i < edges.size(); i++) {
86 @Override
87 public void update(Observable arg0, Object arg1) {
88 if(vertexes.contains(arg0) || edges.contains(arg0)){
89 this.setChanged();
94 //File IO Code
95 public void writeToFile(File file) throws Exception
97 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
99 out.write(vertexes.size() + " " + edges.size() + "\r\n");
100 for(int i=0; i < vertexes.size(); i++)
101 out.write(vertexes.get(i).getX() + " " + vertexes.get(i).getY() + " " + vertexes.get(i).getWidth() + " " + vertexes.get(i).getHeight() +" "+ vertexes.get(i).getName() + "\r\n");
102 for(int i=0; i < edges.size(); i++)
103 out.write(vertexes.indexOf(edges.get(i).getEdge(true)) + " " + vertexes.indexOf(edges.get(i).getEdge(false)) + "\r\n");
104 out.close();
109 private static GraphVertex[] readVertexes(int count, Scanner s)
111 GraphVertex[] vertexes = new GraphVertex[count];
112 for(int i=0; i < count; i++)
113 vertexes[i] = new GraphVertex(s);
114 return vertexes;
118 public static GraphModel fromFile(File file) throws Exception
120 GraphModel model = new GraphModel();
121 Scanner scanner = new Scanner(file, "UTF-8");
123 int numKnopen = scanner.nextInt();
124 int numKanten = scanner.nextInt();
125 scanner.nextLine();
127 GraphVertex[] vertexes = readVertexes(numKnopen,scanner);
129 model.addEdge(readKanten(scanner, numKanten, vertexes));
130 model.addGraph(vertexes);
132 return model;
134 private static GraphEdge[] readKanten(Scanner scanner, int numKanten,
135 GraphVertex[] vertexes) {
136 GraphEdge[] edges = new GraphEdge[numKanten];
137 for (int i = 0; i < numKanten; i++) {
138 int obj1 = scanner.nextInt();
139 int obj2 = scanner.nextInt();
140 edges[i] = new GraphEdge(vertexes[obj1], vertexes[obj2]);
141 if(i != (numKanten-1)){
142 scanner.nextLine();
145 return edges;
149 public static GraphModel fromFile(String fileName) throws Exception
151 File file = new File(fileName);
152 return fromFile(file);